接下來就是對集群成員 — Coordinator 與 Worker 的配置,先說明 Coordinator 的部分,這塊包含了 Coordinator 的:
*jmx-exporter (Prometheus JMX Exporter):
用來把 Java 應用程式的內部狀態(JMX metrics),轉換成 Prometheus 可讀格式的工具。
而 trino 是一種 Java app 故用其來做監控。
coordinator:
resources:
limits:
# 最大記憶體上限
memory: "4Gi"
requests:
# initial配置 1CPU 3GB
cpu: "1000m"
memory: "3Gi"
# Pod 檢查政策
readinessProbe:
# 60 秒開始檢查,檢查未準備好24次才重啟
initialDelaySeconds: 60
failureThreshold: 24
livenessProbe:
# 60 秒開始檢查,檢查未活著24次才重啟
initialDelaySeconds: 60
failureThreshold: 24
annotations:
# 設定 karpenter 不主動終止 Pod
karpenter.sh/do-not-disrupt: "true"
additionalConfigFiles:
# 權限控管(使用 file 做權限控管)
access-control.properties: |
access-control.name=file
security.refresh-period=150s
security.config-file=/etc/trino/access-control/rules.json
# 資源群組(使用 file 做權限控管)
resource-groups.properties: |
resource-groups.configuration-manager=file
resource-groups.config-file=/etc/trino/resource-groups/resource-groups.json
# 將 k8s secrets 掛進 /secrets/
## 使用 eso (External Secrets Operator)
## 故須與 external-secrets.yaml 一併設定
secretMounts:
- name: eso-trino-xxx
secretName: eso-trino-xxx
path: /secrets/
additionalVolumes:
# 取出 k8s secrets 的 resource-groups
- name: resource-groups
secret:
secretName: eso-trino-xxx
items:
- key: resource_groups.json
path: resource-groups.json
# 取出 k8s secrets 的 access-control
- name: access-control
secret:
secretName: eso-trino-xxx
items:
- key: access_rules.json
path: rules.json
additionalVolumeMounts:
# 將 resource-groups 掛進 volume
- name: resource-groups
mountPath: /etc/trino/resource-groups/
readOnly: true
# 將 access-control 掛進 volume
- name: access-control
mountPath: /etc/trino/access-control/
readOnly: true
# jvm 記憶體設定
jvm:
maxHeapSize: 2G
additionalJVMConfig:
# 設定開放模組訪問
- --add-opens=java.base/java.nio=ALL-UNNAMED
- -XX:+UnlockDiagnosticVMOptions
- -XX:G1NumCollectionsKeepPinned=10000000
- -Dcom.sun.management.jmxremote
- -Dcom.sun.management.jmxremote.port=9080
- -Dcom.sun.management.jmxremote.rmi.port=9081
- -Dcom.sun.management.jmxremote.local.only=false
- -Dcom.sun.management.jmxremote.authenticate=false
- -Dcom.sun.management.jmxremote.ssl=false
- -Djava.rmi.server.hostname=127.0.0.1
# 加入 JMX Prometheus Java Agent
- -javaagent:/usr/lib/trino/lib/jmx_prometheus_javaagent.jar=9082:/usr/lib/trino/lib/jmx.config.yaml
# jmx-Exporter 設定 (提供 Prometheus 監控設定)
additionalExposedPorts:
jmxExporter:
servicePort: 9082
name: jmx-exporter
port: 9082
protocol: TCP
而 Worker 的設定大致都與 Coordinator 相似,一樣包含了資源配置、失效政策、secretMounts 以及 jvm 設定,只是就少了權限控管相關的設定,因為權限控管是做在 Coordinator 裡的:
worker:
resources:
limits:
# 最大記憶體上限
memory: "4Gi"
requests:
# initial配置 1CPU 3GB
cpu: "1000m"
memory: "3Gi"
# Pod 檢查政策
readinessProbe:
# 30 秒開始檢查,檢查未準備好24次才重啟
initialDelaySeconds: 30
failureThreshold: 24
livenessProbe:
# 30 秒開始檢查,檢查未活著24次才重啟
initialDelaySeconds: 30
failureThreshold: 24
# 將 k8s secrets 掛進 /secrets/
## 使用 eso (External Secrets Operator)
## 故須與 external-secrets.yaml 一併設定
secretMounts:
- name: eso-trino-xxx
secretName: eso-trino-xxx
path: /secrets/
# jvm 記憶體設定
jvm:
maxHeapSize: 2G
additionalJVMConfig:
- --add-opens=java.base/java.nio=ALL-UNNAMED
- -XX:+UnlockDiagnosticVMOptions
- -XX:G1NumCollectionsKeepPinned=10000000
系列文明日《部署與 CICD,Trino 在雲端 (三)》,將進一步介紹 集群成員之外的設定,內容包含 Exchange Manager(地端啟動時以 .properties
檔設定)、內外部網路配置、資源標籤,以及 *Event Listener 的設置。
My Linkedin: https://www.linkedin.com/in/benny0624/
My Medium: https://hndsmhsu.medium.com/